3.4.2 js 设计模式

发布/订阅者模式

var pubsub = (()=>{  
  var topics = {}; 
  function subscribe(topic,fn){    
    if(!topics[topic]){
      topics[topic] = [];  
    }
    topics[topic].push(fn);
  }  

  function publish(topic,...args){    
    if(!topics[topic])      
      return;    
    for(let fn of topics[topic]){
      fn(...args);  
    }
  } 
  return {
    subscribe,
    publish
  }
})()


pubsub.subscribe('test',function(a,b){  //订阅者A订阅了test事件
  console.log(a,b);    
});

pubsub.publish('test','123','HH'); 

// 123 HH
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

在观察者模式中,观察者需要直接订阅目标事件。在目标发出内容改变的事件后,直接接收事件并作出响应。
发布订阅模式相比观察者模式多了个事件通道,订阅者和发布者不是直接关联的。
这段话可以看出上面的例子是发布订阅模式。订阅者A和发布者B是通过pubsub这个对象关联起来的,他们没有直接的交流。

参考